import jwt from 'jsonwebtoken';
import { UserAttributes } from '../models/User';

// JWT密钥，实际项目中应该从环境变量中获取
const JWT_SECRET = process.env.JWT_SECRET || 'dimensional-echo-secret-key';

// JWT过期时间
const JWT_EXPIRES_IN = '7d';

/**
 * 生成JWT令牌
 * @param payload 令牌载荷
 * @returns JWT令牌
 */
export function generateToken(payload: { id: number; openid: string }): string {
  return jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
}

/**
 * 验证JWT令牌
 * @param token JWT令牌
 * @returns 解码后的载荷
 */
export function verifyToken(token: string): { id: number; openid: string } | null {
  try {
    return jwt.verify(token, JWT_SECRET) as { id: number; openid: string };
  } catch (error) {
    return null;
  }
}

/**
 * 从请求头中提取JWT令牌
 * @param authHeader Authorization请求头
 * @returns JWT令牌或null
 */
export function extractTokenFromHeader(authHeader: string | undefined): string | null {
  if (!authHeader) {
    return null;
  }
  
  const parts = authHeader.split(' ');
  if (parts.length !== 2 || parts[0] !== 'Bearer') {
    return null;
  }
  
  return parts[1];
}

/**
 * 生成刷新令牌
 * @param payload 令牌载荷
 * @returns 刷新令牌
 */
export function generateRefreshToken(payload: { id: number; openid: string }): string {
  return jwt.sign(payload, JWT_SECRET, { expiresIn: '30d' });
}

/**
 * 验证刷新令牌
 * @param token 刷新令牌
 * @returns 解码后的载荷
 */
export function verifyRefreshToken(token: string): { id: number; openid: string } | null {
  try {
    return jwt.verify(token, JWT_SECRET) as { id: number; openid: string };
  } catch (error) {
    return null;
  }
}